package com.example4.test8;

import com.sun.org.apache.bcel.internal.generic.NEWARRAY;
import jdk.internal.dynalink.support.ClassLoaderGetterContextProvider;

/**
 * @Auther: shiquan
 * @Date: 2024/10/16 - 10 - 16 -14:40
 */
public class Test {
    public static void main(String[] args) {
        /*
  	定义数组存储3个学生对象。
	学生的属性：学号，姓名，年龄。
	要求1：在添加一个学生对象,添加的时候需要进行学号的唯一性判断。
	要求2：添加完毕之后，遍历所有学生信息。
	要求3：通过id删除学生 如果存在，则删除，如果不存在，则提示删除失败。
	要求4：删除完毕之后，遍历所有学生信息。
	要求5：id为2的学生，年龄+1岁
   */
        //1创建一个数组来存储对象
        Student[] arr = new Student[3];
        //2 创建学生对象并添加到数组里面
        Student stu1 = new Student(1, "zhangsan", 23);
        Student stu2 = new Student(2, "lisi", 24);
        Student stu3 = new Student(3, "wangwu", 25);
        //3 把学生对象添加到数组里面
        arr[0] = stu1;
        arr[1] = stu2;
        arr[2] = stu3;

        //要求1：在添加一个学生对象，添加的时候需要进行学号的唯一性判断。
        Student stu4 = new Student(4, "zhaoliu", 26);
        //唯一性
        //已经存在 不用添加
        //不存在 就可以把学生对象添加到数组
        boolean flag = contains(arr, stu4.getId());
        if (flag =true){
            //已经存在   不用添加
            System.out.println("当前id重复,请修改id后进行添加");
        }else {
            //不存在  就可以把学生对象添加到数组
            //把stu4加到数组里面
            //1 数组已经存满 --只能创建一个新数组   新数组长度=老数组长度加+1
            //2 数组没有存满  直接添加
            int count = getCount(arr);
            //对count判断
            if (count == arr.length) {
                //已经存满
                //创建一个新的数组  长度=老数组长度+1
                //然后把老数组的元素  拷贝到新数组里面
                Student[] newArr =createNewArr(arr);
                //把stu4添加进去
                newArr[count] = stu4;
                //要求2 添加完成后  遍历所有学生信息
                printArr(newArr);

            } else {
                //没有存满
                //[stu1 stu2 null]
                //getCount获取的是2 表示数组里面已经有2个元素
                //还有一个意思 如果下一次要添加数据   就是添加到2索引的位置
                arr[count] = stu4;
                //要求2  添加完成  遍历所有学生信息
                printArr(arr);
            }
        }
    }

    //创建一个新的数组  长度=老数组长度+1
    //然后把老数组的元素  拷贝到新数组里面

    public static void  printArr(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            Student stu=arr[i];
            if (stu !=null){
                System.out.println(stu.getId()+","+stu.getName()+","+stu.getAge());
            }

        }
    }
    public static Student[] createNewArr(Student[] arr){
        Student[] newArr = new Student[arr.length+1];
        for (int i = 0; i < arr.length; i++) {
            //把数组里面的对象添加到新数组里面
            newArr[i] = arr[i];
        }
        //把新数组返回
        return newArr;
    }

    //定义一个方法判断数组中已经存在几个元素
    public static int getCount(Student[] arr){
        //定义一个计算器来统计
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]!=null){
                count++;

            }
        }
        return count;
    }

    //1 我要干嘛
    //2 我干这个事情  需要怎么样完成  数组id
    //3 调用处是否需要继续使用方法的结果

    //唯一性判断
    public static boolean contains(Student[] arr, int id) {
        //依次获取到数组里面的每一个学生元素
        for (int i = 0; i < arr.length; i++) {
            //依次获取到数组里面的每一个学生元素
            Student stu = arr[i];
            //获取数组学生对象的id
            int sid = stu.getId();
            //比较
            if (sid == id) {
                return true;
            }
        }
        //当循环结束后，还没有找到一样的，那么就表示数组中要查找id是不存在的
        return false;
    }
}













